<?php

include_once("../dao/conexao_class.php");
include_once("../model/logradouro_model_class.php");

class LogradouroDAO {

    private $insert = "INSERT INTO logradouro(log_cep, log_endereco, log_bairro, log_cidade, log_uf) values(?,?,?,?,?);";
    private $update = "UPDATE logradouro SET log_cep = ?, log_endereco = ?, log_bairro = ?, log_cidade, log_ uf = ? WHERE log_id = ?;";
    private $delete = "DELETE FROM logradouro WHERE log_id = ?;";
    private $select_all = "SELECT * FROM logradouro;";
    private $select = "SELECT * FROM logradouro WHERE log_cep = ?";
    private $select_cep = "SELECT log_cep FROM logradouro WHERE log_id = ?";
    private $select_id = "SELECT log_id FROM logradouro WHERE log_cep = ?";

    function insert($objLogradouro) {
        //conectando ao banco
        $objConn = new Conexao();
        $conn = $objConn->conecta();
//        var_dump($conn);
        //criando o preparedStatment
        if ($stm = $conn->prepare($this->insert)) {

            $stm->bind_param("issss", $objLogradouro->getCep(),$objLogradouro->getEndereco(),
                    $objLogradouro->getBairro(),$objLogradouro->getCidade(),$objLogradouro->getUf());

            if ($stm->execute()) {
                $conn->close();
                return true;
            } else {
                $conn->close();
                return false;
            }
        } else {
            return false;
        }
    }

    function update($objLogradouro) {

        $objConn = new Conexao();
        $conn = $objConn->conecta();

        if ($stm = $conn->prepare($this->update)) {

            $stm->bind_param("isssi", $objLogradouro->getCep(),$objLogradouro->getEndereco(),$objLogradouro->getBairro(),
                    $objLogradouro->getCidade(),$objLogradouro->getUf(), $objLogradouro->getId());
//            $stm->bind_param("i",);

            if ($stm->execute()) {
                $conn->close();
                return true;
            } else {
                $conn->close();
                return false;
            }
        }
        return false;
    }

    function delete($id) {

        $objConn = new Conexao();
        $conn = $objConn->conecta();

        if ($stm = $conn->prepare($this->delete)) {

            $stm->bind_param("i", $id);

            if ($stm->execute()) {
                $conn->close();
                return true;
            } else {
                $conn->close();
                return false;
            }
        }
        return false;
    }

    function findAllLogradouro() {

        $objConn = new Conexao();
        $conn = $objConn->conecta();
        $logM = new LogradouroModel();
        $lista = array();
        if ($stm = $conn->prepare($this->select_all)) {

            $stm->execute();

            //atribui o resultado encontrado as variaveis
            $stm->bind_result($id, $cep, $endereco, $bairro, $cidade, $uf);

            //para cada resultado encontrado
            $i = 0;
            while ($stm->fetch()) {
                $logM = new LogradouroModel();
                
                $logM->setId($id);
                $logM->setCep($cep);
                $logM->setEndereco($endereco);
                $logM->setBairro($bairro);
                $logM->setCidade($cidade);
                $logM->setUf($uf);
                
                $lista[$i++] = $logM;
            }

            $conn->close();
            return $lista;
        }
    }

    function findLogradouroByFuncionario($idLogradouro) {

        $objConn = new Conexao();
        $conn = $objConn->conecta();
        $logM = new LogradouroModel();
        if ($stm = $conn->prepare($this->select)) {
            
            $stm->bind_param("i",$idLogradouro);
            
            $stm->execute();

            //atribui o resultado encontrado as variaveis
            $stm->bind_result($id, $cep, $endereco, $bairro, $cidade, $uf);


            //para cada resultado encontrado
            
            while ($stm->fetch()) {
                $logM = new LogradouroModel();
                
                $logM->setId($id);
                $logM->setCep($cep);
                $logM->setEndereco($endereco);
                $logM->setBairro($bairro);
                $logM->setCidade($cidade);
                $logM->setUf($uf);
                
            }

            $conn->close();
            return $logM;
        }
    }
    
    function existe($cep) {

        $objConn = new Conexao();
        $conn = $objConn->conecta();

        if ($stm = $conn->prepare($this->select_id)) {
            
            $stm->bind_param("i",$cep);
            
            $stm->execute();
            
            $stm->bind_result($id);
            
            while($stm->fetch()){
                if($id != 0){
                    return true;
                }
            }
            return false;
        }
    }
    
    function findIdByCep($cep){
        $objConn = new Conexao();
        $conn = $objConn->conecta();
        $lista = 0;
        if ($stm = $conn->prepare($this->select_id)) {
            
            $stm->bind_param("i",$cep);
            
            $stm->execute();

            //atribui o resultado encontrado as variaveis
            $stm->bind_result($id);


            //para cada resultado encontrado
            
            while ($stm->fetch()) {
//                echo "Id: ".$id." Descrição: ".$descricao."<br>";
                $lista = $id;
            }

            $conn->close();
            return $lista;
        }
    }
    
    function findCepById($id){
        $objConn = new Conexao();
        $conn = $objConn->conecta();
        $lista = 0;
        if ($stm = $conn->prepare($this->select_cep)) {
            
            $stm->bind_param("i",$id);
            
            $stm->execute();

            //atribui o resultado encontrado as variaveis
            $stm->bind_result($cep);


            //para cada resultado encontrado
            
            while ($stm->fetch()) {
//                echo "Id: ".$id." Descrição: ".$descricao."<br>";
                $lista = $cep;
            }

            $conn->close();
            return $lista;
        }
    }
    
}

//$teste = new LogradouroDAO();
//$log = new LogradouroModel();
////$log->setId(3);
//$log->setDescricao("Administraçao");
//
////$log = 3;
//if($teste->insert($log)){
//    printf("Deletado com sucesso!");
//}else{
//    printf("Erro ao deletar!");
//}
//
//var_dump($teste->findLogradouroByFuncionario(3));

